import request from '@/api/request';
import { AxiosPromise } from 'axios';
import {
  MissionVO,
  MissionPageQuery,
  MissionForm,
  PageResult,
  Result,
  MissionStatusUpdateParam,
  MissionProgressUpdateParam
} from './types';

/**
 * 获取开发任务分页列表
 *
 * @param queryParams 查询参数
 * @returns 开发任务分页结果
 */
export function getMissionPage(queryParams: MissionPageQuery): AxiosPromise<PageResult<MissionVO>> {
  return request({
    url: '/api/v1/mission/page',
    method: 'get',
    params: queryParams
  });
}

/**
 * 根据ID获取开发任务详情
 *
 * @param id 任务ID
 * @returns 开发任务详情
 */
export function getMissionById(id: number): AxiosPromise<Result<MissionVO>> {
  return request({
    url: `/api/v1/mission/${id}`,
    method: 'get'
  });
}

/**
 * 新增开发任务
 *
 * @param missionForm 任务表单数据
 * @returns 操作结果
 */
export function saveMission(missionForm: MissionForm): AxiosPromise<Result> {
  return request({
    url: '/api/v1/mission',
    method: 'post',
    data: missionForm
  });
}

/**
 * 修改开发任务
 *
 * @param missionForm 任务表单数据
 * @returns 操作结果
 */
export function updateMission(missionForm: MissionForm): AxiosPromise<Result> {
  return request({
    url: '/api/v1/mission',
    method: 'put',
    data: missionForm
  });
}

/**
 * 删除开发任务
 *
 * @param ids 任务ID数组
 * @returns 操作结果
 */
export function deleteMission(ids: number[]): AxiosPromise<Result> {
  return request({
    url: '/api/v1/mission',
    method: 'delete',
    data: ids
  });
}

/**
 * 更新任务状态
 *
 * @param param 状态更新参数
 * @returns 操作结果
 */
export function updateMissionStatus(param: MissionStatusUpdateParam): AxiosPromise<Result> {
  return request({
    url: `/api/v1/mission/${param.id}/status/${param.status}`,
    method: 'put'
  });
}

/**
 * 更新任务进度
 *
 * @param param 进度更新参数
 * @returns 操作结果
 */
export function updateMissionProgress(param: MissionProgressUpdateParam): AxiosPromise<Result> {
  return request({
    url: `/api/v1/mission/${param.id}/progress/${param.progress}`,
    method: 'put'
  });
}

/**
 * 导出开发任务数据
 *
 * @param queryParams 查询参数
 * @returns 文件数据
 */
export function exportMission(queryParams: MissionPageQuery): AxiosPromise<any> {
  return request({
    url: '/api/v1/mission/export',
    method: 'get',
    params: queryParams,
    responseType: 'blob'
  });
}
